package com.ruoyi.dataBase.domain.bo;

import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.*;

import java.util.Date;

import java.math.BigDecimal;
import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 交通物流项目业务对象 industrial_transport_project
 *
 * @author yangzhen
 * @date 2025-11-10
 */

@Data
@EqualsAndHashCode(callSuper = true)
@Schema(name = "IndustrialTransportProjectBo", description = "交通物流项目业务对象")
public class IndustrialTransportProjectBo extends BaseEntity {

    /**
     * 主键id
     */
    @NotBlank(message = "主键id不能为空", groups = {EditGroup.class})
    @Schema(description = "主键id")
    private String id;

    /**
     * 项目名称
     */
    @NotBlank(message = "项目名称不能为空", groups = {AddGroup.class, EditGroup.class})
    @Schema(description = "项目名称")
    private String projectName;

    /**
     * 项目类型
     */
    @NotBlank(message = "项目类型不能为空", groups = {AddGroup.class, EditGroup.class})
    @Schema(description = "项目类型")
    private String projectType;

    /**
     * 项目类别
     */
    @NotNull(message = "项目类别不能为空", groups = {AddGroup.class, EditGroup.class})
    @Schema(description = "项目类别")
    private String projectCategory;

    /**
     * 交通物流规划
     */
    @NotBlank(message = "交通物流规划不能为空", groups = {AddGroup.class, EditGroup.class})
    @Schema(description = "交通物流规划")
    private String planId;

    /**
     * 立项日期
     */
    @NotNull(message = "立项日期不能为空", groups = {AddGroup.class, EditGroup.class})
    @Schema(description = "立项日期")
    private Date startDate;

    /**
     * 建设单位
     */
    @NotBlank(message = "建设单位不能为空", groups = {AddGroup.class, EditGroup.class})
    @Schema(description = "建设单位")
    private String buildCompany;

    /**
     * 建设状态
     */
    @NotBlank(message = "建设状态不能为空", groups = {AddGroup.class, EditGroup.class})
    @Schema(description = "建设状态")
    private String buildStatus;

    /**
     * 结项日期
     */
    @NotNull(message = "结项日期不能为空", groups = {AddGroup.class, EditGroup.class})
    @Schema(description = "结项日期")
    private Date endDate;

    /**
     * 计划建开始设期
     */
    @NotNull(message = "计划建开始设期不能为空", groups = {AddGroup.class, EditGroup.class})
    @Schema(description = "计划建开始设期")
    private Date planStartDate;

    /**
     * 计划完成建设期
     */
    @NotNull(message = "计划完成建设期不能为空", groups = {AddGroup.class, EditGroup.class})
    @Schema(description = "计划完成建设期")
    private Date planEndDate;

    /**
     * 总投资
     */
    @NotNull(message = "总投资不能为空", groups = {AddGroup.class, EditGroup.class})
    @Schema(description = "总投资")
    private BigDecimal totalInvest;

    /**
     * 完成投资
     */
    @NotNull(message = "完成投资不能为空", groups = {AddGroup.class, EditGroup.class})
    @Schema(description = "完成投资")
    private BigDecimal completeInvest;

    /**
     * 备注
     */
    @NotBlank(message = "备注不能为空", groups = {AddGroup.class, EditGroup.class})
    @Schema(description = "备注")
    private String remark;

    /**
     * 数据状态
     */
    @NotNull(message = "数据状态不能为空", groups = {AddGroup.class, EditGroup.class})
    @Schema(description = "数据状态")
    private Long dataStatus;

    /**
     * 项目建议书
     */
    @Schema(description = "项目建议书")
    private String fileList1;

    /**
     * 可行性研究报告
     */
    @Schema(description = "可行性研究报告")
    private String fileList2;

    /**
     * 初步设计
     */
    @Schema(description = "初步设计")
    private String fileList3;

    /**
     * 施工图设计
     */
    @Schema(description = "施工图设计")
    private String fileList4;

    /**
     * 其他资料
     */
    @Schema(description = "其他资料")
    private String fileList5;

    /**
     * 主体单位
     */
    @Schema(description = "主体单位")
    private String fileList6;

    /**
     *
     */
    private String mainEntity;
    @Schema(description = "开始创建时间")
    private Date beginCreateTime;
    @Schema(description = "结束创建时间")
    private Date endCreateTime;
    @Schema(description = "开始更新时间")
    private Date beginUpdateTime;
    @Schema(description = "结束更新时间")
    private Date endUpdateTime;
}
